<?php

namespace app\http\middleware;

use app\common\tool\Tool;
use app\system\controller\Menu;
use app\system\model\NodeModel;
use think\facade\Cache;

/**
 * Class Base 全局基础中间件
 *
 * 1. 判断是否登录
 *      没登录
 *          返回去登录的信息
 *      已登录
 *          判断该用户是否有访问该路径的权限
 *              有则放行
 *              没有则返回提示
 * @package app\http\middleware
 */
class Base
{
    use Tool;
    public function handle($request, \Closure $next)
    {
        //获取节点
        $baseUrl = $this->getBaseUrl($request->baseUrl());
        $node = NodeModel::get(['url' => $baseUrl, 'status' => 1]);
        if(!$node){
            return $this->returnJson(501, $baseUrl.'节点不存在');
        }
        //检查节点是否是白名单节点
        //白名单节点无需检查登录，权限等
        if($node->allow === 1){
            return $next($request);
        }

        //不是白名单的节点
        $amdin_id = Cache::get($request->header('Authorization'));
        if(!$amdin_id){
            return $this->returnJson(401, '请先登录');
        }

        //控制器传参
        $request->admin_id = $amdin_id;
        //如果是超级管理员,拥有所有的节点权限
        if($amdin_id == 1){
            return $next($request);
        }
        //判断用户是否拥有该权限节点权限
        if(Menu::hasUserTheNode($amdin_id,$node->id) === false){
            return $this->returnJson(403, '您没有权限,请联系超级管理员分配权限');
        }

        return $next($request);
    }
}
